Tesseract est un moteur de reconnaissance optique de caractères (ROC, OCR) qui a été conçu par les ingénieurs de HP de 1984 à 1995, avant d'être abandonné. Après 10 ans de purgatoire, son code est ouvert en 2005, et le développement est repris sous la houlette de Google. Les premiers résultats sont prometteurs. Enfin un bon logiciel libre d'OCR sous linux ? L'avenir nous le dira… Il permet déjà d'obtenir une reconnaissance optique de qualité sur un certain nombre de documents (sans mise en page complexe).
Tesseract a pour vocation d'être utilisé :
Tesseract est distribué sous licence Apache, c'est-à-dire en gros qu'il est Open Source mais pas copyleft.
Installez les paquetstesseract-ocr et tesseract-ocr-fra (dépôts Universe).
Il existe d'autres fichiers de langues, comme par exemple : tesseract-ocr-deu (allemand), tesseract-ocr-eng (anglais), tesseract-ocr-spa (espagnol), tesseract-ocr-nld (hollandais), tesseract-ocr-ita (italien), tesseract-ocr-por (portugais-brésilien), tesseract-ocr-deu-f (vieil-allemand).
Pensez toutefois à installer le paquet ImageMagick si vous voulez utiliser xsane2tess (utilitaire convert nécessaire).
Tesseract n'accepte pour le moment que des fichiers au format tif et mdi. Après avoir converti votre fichier grâce à un logiciel ad hoc, entrez la commande suivante :
tesseract ~/nomdelimage.tif nom_du_fichier_de_sortie_sans_l_extension
En cas d'installation de la version 2.01, pour la reconnaissance de texte en français :
tesseract ~/nomdelimage.tif nom_du_fichier_de_sortie_sans_l_extension -l fra
tesseract ~/nomdelimage.tif /home/votre_identité/Desktop/nom_du_fichier_de_sortie_sans_l_extension -l fra
Si vous avez installé les fichiers pour la reconnaissance de texte en d'autres langues, vous ajoutez, au lieu de
-l fra
-l eng (pour l'anglais) -l deu (pour l'allemand) -l spa (pour l'espagnol) -l ita (pour l'italien) -l nld (pour le néerlandais) -l por (pour le portugais) -l vie (pour le vietnamien) -l deu-f (pour le vieil-allemand)
Les explications sont données sur la page gscan2pdf de la documentation Ubuntu francophone.
Il est possible d'utiliser tesseract avec XSane grâce à l'adaptateur xsane2tess.
vérifier que l code est toujours d'actualité
Code:
#!/bin/bash cd ~/Bureau # ou cd ~/Desktop convert *.png sortie.tif ; # il est plus prudent de corriger le bpp maximum pour le fichier tiff de sortie (max 8 pour tesseract -> depth = 4) # soit convert -depth 4 *.png sortie.tif ; tesseract sortie.tif sortie -lwt fra > sortie.txt ; # ou tesseract sortie.tif sortie -l fra > sortie.txt ; oowriter sortie.txt
Même méthode pour les fichiers au format JPG, en utilisant l'outil "Tesseract-jpg2openofficewriter".
N.B. : au passage, un document sortie.tif et un document sortie.txt sont placés sur le bureau; ce sont des documents transitoires créés par le script. On peut l'es effacer, ou ajouter à la fin du script les lignes :
rm sortie.tif rm sortie.txt
Les 4 fichiers inttemp, normproto, pfftable et unicharset sont indispensables à la création d'une langue, les autres sont facultatifs. Tous les fichiers devront être préfixés par l'identifiant de leur langue.
stocke les formes géométriques prototypales des différents caractères; se génère par l'exécutable mftraininf, cf plus bas la section apprentissage.
"number of expected features for each character" ?
; se génère par l'exécutable mftraininf, cf plus bas la section apprentissage.
"the character normalization sensitivity prototypes"
; se génère par l'exécutable cftraininf, cf plus bas la section apprentissage.
Ce fichier recense tous les caractères du prototype (1 ligne par caractère),ainsi que 4 propriétés: nombre, majuscule, minuscule, lettre, représenté par 1 hexadécimal:
; 0 b 3 W 5 7 8
par exemple, W est noté 5 (hexa), ce qui correspond à 0101 (binaire), ce qui veut dire: ce n'est pas un nombre, c'est une majuscule, ce n'est pas une minuscule, c'est une lettre.
Au lieu d'être écrit à la main, il peut être généré par: unicharset_extractor (cf plus bas la section apprentissage).
Ce fichier texte sert à signaler les risques de confusion entre caractères: il est créé ou augmenté manuellement.
1 m 2 r n 3 i i i 1 m
Ici on signale que le m (1 caractère) peut être confondu avec rn (2 caractères), et que iii (3 caractères) peut être confondu avec m (1 caractère). Quelle conclusion en tire tesseract?
Liste les mots de la langue les plus fréquents (en codage DAWG). On peut rentrer les mots dans un fichier texte UTF8 (1 par ligne), puis les mettre au bon format par:
wordlist2dawg frequent_words_list freq-dawg
Liste les mots moins fréquents. Même principe que ci-dessus:
wordlist2dawg words_list word-dawg
Ce fichier est usuellement vide.
On peut faire progresser tesseract en créant des fichiers de langue adaptés aux "fichiers images" sur lesquels on doit réaliser la ROC le plus souvent. Pour cela, procédez comme suit :
tesseract fontfile.tif fontfile batch.nochop makebox
Cette image fontfile.tif (qu'il vous faut créer auparavant) doit contenir tous les signes de la langue sur laquelle vous voulez réaliser la ROC, les plus fréquents au moins 20 fois, les plus rares au moins 5 fois, les autres en moyenne 10 fois, dans le plus grand désordre (c'est à dire en mélangeant les symboles, les lettres, les chiffres et les signes de ponctuation). Renommer fontfile.txt en fontfile.box
r 814 492 837 516 o 839 483 862 516 s 865 491 878 520 i 101 452 122 483 a 126 453 146 486
Chaque ligne correspond à un caractère Unicode : sa représentation puis les coordonnées de ses extrémités (gauche, bas, droite, haut). On peut modifier les erreurs par remplacement d'une lettre par une autre ou, plus compliqué, quand plusieurs lettres on été prises pour une seule (ou vice versa), fusionner en modifiant les coordonnées, par exemple :
, 197 496 205 507 , 206 496 214 508
devient :
„ 197 496 214 508
Il existe une interface graphique "tesseractTrainer-fra.py" permettant de réaliser ceci plus facilement. Il s'agit d'un programme en python. On peut le télécharger ici (sa version anglaise "tesseractTrainer" est ici). Le décompresser et le placer dans le dossier de votre choix… puis via un terminal, se placer dans ce dossier et lancer la commande :
python tesseractTrainer-fra.py
Ne pas laisser une cellule vide (sinon vous ne pourrez plus ouvrir le fichier fontfile.box). Pour rapprocher deux lettres qui appartiennent au même mot, mais qui sont apparemment séparées dans l'interface graphique, modifier leurs coordonnées (droite ou gauche) : la modification ne sera pas immédiatement visualisée, mais si vous sauvegardez le fichier box (= sauvegarder l'info box), vous constaterez la modification en chargeant de nouveau le fichier. Veillez à ce que les coordonnées des signes ne se chevauchent pas (surtout droite, gauche, le risque étant plus grand). N.B. : les raccourcis clavier aident beaucoup dès qu'on a bien repéré leur usage !
tesseract fontfile.tif junk nobatch box.train
qui propose en sortie un fichier fontfile.tr, qui décrit géométriquement les différents caractères du tif. Important : vérifiez les erreurs dans le terminal. S'il y a des erreurs "FATALITY", alors il est inutile de poursuivre le processus d'apprentissage tant que le fichier fontfile.box n'est pas corrigé. Une erreur "FATALITY" indique généralement que cette étape a échoué à trouver tous les échantillons pour l'apprentissange de l'un des caractères répertoriés dans votre fichier fontfile.box. Soit les coordonnées sont erronées, soit il y a quelque chose d'incorrect dans votre fichier image d'origine.
mftraining fontfile_1.tr fontfile_2.tr
… ce qui donne en sortie 2 fichiers, inttemp et pffmtable.
cntraining fontfile_1.tr fontfile_2.tr
… crée lui normproto. Enfin
unicharset_extractor fontfile_1.box fontfile_2.box
… crée le fichier unicharset.
tesseract fichier.tif fichier -l mfra
au lieu de :
tesseract fichier.tif fichier -l fra